有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当数组位于arraylist中时,如何访问它?

我尝试做的总体目标是将字符串与数组的索引0(保存在arraylist中)进行比较,如果字符串相同(忽略大小写),则调用一个方法,将字符串的大小写与翻译的单词(保存在arraylist中数组的索引1处)匹配。当我运行这段代码并打印出翻译后的arraylist的内容时,我会得到所有“不匹配”字符。我假设这是因为我没有以正确的方式访问我想要的索引。请帮忙

public static String translate(String word, ArrayList<String[]> wordList) { 
    if (word == "." || word == "!" || word == ";" || word == ":") {
        return word;
    }
    for (int i = 0; i < wordList.size(); i++) {
            String origWord = wordList.get(i)[0];
            String transWord = wordList.get(i)[1];

            if (word.equalsIgnoreCase(origWord)) { //FIXME may need to change if you need to switch from translated to original
                String translated = matchCase(word, transWord);
                return translated;
            }
    }
    String noMatch = Character.toString(Config.LINE_CHAR);     


    return noMatch;
}

样本数据和预期结果

word=“你好”

词表。获取(i)[0]=“你好”

词表。得到(i)[1]=“你好”

(word和wordList.get(i)[0]匹配,执行下一步)

调用match case方法并返回与原始单词大小写相同的翻译单词->

翻译为“你好”

返回已翻译的单词

(for循环遍历整个单词列表,直到找到匹配项,然后调用translate方法)

**

匹配案例代码

 public static String matchCase(String template, String original) {
    String matched = "";
    if (template.length() > original.length()) {

        for (int i = 1; i <= original.length(); i++) {
            if (template.charAt(i-1) >= 'a' &&  template.charAt(i-1) <= 'z') {

                if (i == original.length()) {

                matched +=  original.substring(original.length() - 1).toLowerCase();

                }
                else {

                    matched += original.substring((i-1), i).toLowerCase();
                }

            }
            else if (template.charAt(i-1) >= 'A' && template.charAt(i-1) <= 'Z') {
                if (i == original.length()) {

                    matched += original.substring(original.length() - 1).toUpperCase();

                }
                else {

                    matched +=  original.substring((i-1), i).toUpperCase();

                }
            }
        }
        return matched;
     }
     else if (template.length() < original.length()) {
         int o;
            original.toLowerCase();
            for (int i = 1; i <= template.length(); i++) {
                if (template.charAt(i-1) >= 'a' &&  template.charAt(i-1) <= 'z') {
                    if (i == template.length()) {
                        matched += original.substring(original.length() - 1).toLowerCase();
                    }
                    else {
                        matched += original.substring((i-1), i).toLowerCase();
                    }
                }
                else if (template.charAt(i-1) >= 'A' && template.charAt(i-1) <= 'Z') {
                    if (i == template.length()) {
                        matched += original.substring(original.length() - 1).toUpperCase();
                    }
                    else {
                        matched += original.substring((i-1), i).toUpperCase();
                    }
                }
                String newMatched = matched + original.substring(i, original.length() - 1);
                matched = newMatched;
                newMatched = "";
            }

            return matched;
     }

   return original; 
}

共 (1) 个答案

  1. # 1 楼答案

    我已经测试了您的代码,它与您提供的示例配合得相当好。我帮不了你的忙

    然而,有一些缺陷需要通知,还有一些改进需要建议:

    1. ^当模板比翻译的单词短时,{}失败
    2. 永远不要将字符串与==进行比较。使用equals方法并查看why
    3. 这并不重要,但为什么总是计算noMatch。为什么不把它作为常数声明一次呢

      public static final String NO_MATCH = String.valueOf(Config.LINE_CHAR);

    4. 更重要的是,我认为matchCase在设计上并不真正相关,而且过于复杂。我认为你应该确定要翻译的单词都是小写还是大写,或者第一个字母都是大写,后面的字母都是小写。当长度不同时,你所做的(逐字比较大小写)并不真正相关

    5. 当您考虑单个字符时,使用^ {CD7}}而不是^ {CD8}},它更简单和更快。<李>
    6. 您还可以查看regex来分析字符串
    7. 你有没有考虑过用^{}进行翻译查找